package com.six.backend.dao;

import com.six.backend.pojo.Authority;
import com.six.backend.pojo.Role;
import com.six.backend.pojo.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * @Author: skyler
 * @Date: 2021/11/7 13:02
 */
@Mapper
public interface RoleDao {
    /**
     * 查询用户的角色信息
     * @param account 用户account
     * @return 用户角色的集合
     */
    Set<String> selectRoleByAccount(String account);

    /**
     * 查询角色信息
     * @param map {account: 用户账号, roleName: 角色名称}
     * @return List 角色列表
     */
    List<Role> selectRoles(Map<String,String> map);

    /**
     * 新建角色
     * @param map
     * @return
     */
    Integer insertRole(Map map);

    /**
     * 判断角色是否存在
     * @param name 角色名称
     * @return Boolean
     */
    List<Map> isExist(String name);

    /**
     * 修改角色信息
     * @param role
     * @return Integer
     */
    Integer updateRole(Role role);

    /**
     * 修改角色权限表角色名称
     * @param roleName
     * @return
     */
    Integer updateRoleNameInRoleAuthority(String roleName);

    /**
     * 修改用户角色表角色名称
     * @param roleName
     * @return
     */
    Integer updateRoleNameInUserRole(String roleName);


    /**
     * 查询角色第N级权限
     * @param roleName 角色名称
     * @param type 权限类型
     * @return
     */
    List<Authority> selectPermissionByRoleName(@Param("roleName") String roleName, @Param("type") Integer type);

    /**
     * 查询角色其它权限
     * @param roleName 角色名称
     * @param type 权限类型
     * @return
     */
    List<Authority> selectOtherPermissionByRoleName(@Param("roleName") String roleName, @Param("type") Integer type);


    /**
     * 删除角色所有权限
     * @param roleName
     * @return Integer
     */
    Integer deleteAllPermissionOfRoleName(String roleName);

    /**
     * 为角色添加权限
     * @param map {RoleName: 角色名称, id: 权限编号}
     * @return
     */
    Integer insertPermissionOfRoleName(Map map);

    /**
     * 删除角色
     * @param roleName
     * @return
     */
    Integer deleteRole(String roleName);

    /**
     * 查找使用该角色的用户
     * @param roleName
     * @return
     */
    List<User> selectUsersUsingRole(String roleName);


}
